home *** CD-ROM | disk | FTP | other *** search
/ ...taking it to the Macs! / ...taking it to the Macs!.iso / Extras / ActiveX Mac SDK / ActiveX SDK / Headers / DVOBJ.H < prev    next >
Encoding:
C/C++ Source or Header  |  1996-07-15  |  17.0 KB  |  517 lines  |  [TEXT/????]

  1. /*****************************************************************************\
  2. *                                                                             *
  3. * dvobj.h -        Data/View object definitions                                  *
  4. *                                                                             *
  5. *               OLE Version 2.0                                               *
  6. *                                                                             *
  7. *               Copyright (c) 1992-1994, Microsoft Corp. All rights reserved. *
  8. *                                                                             *
  9. \*****************************************************************************/
  10.  
  11. #if !defined( __DVOBJ__ ) && !defined( _DVOBJ_H_ )
  12. #define __DVOBJ__
  13. #define _DVOBJ_H_
  14.  
  15. /****** DV value types ******************************************************/
  16.  
  17. //      forward type declarations
  18. #if defined(__cplusplus)
  19. interface IStorage;
  20. interface IStream;
  21. interface IAdviseSink;
  22. interface IMoniker;
  23. #else 
  24. //typedef interface IStorage IStorage;
  25. //typedef interface IStream IStream;
  26. //typedef interface IAdviseSink IAdviseSink;
  27. //typedef interface IMoniker IMoniker;
  28. #endif
  29.  
  30. typedef         interface IStorage * LPSTORAGE, ** LPLPSTORAGE;
  31. typedef         interface IAdviseSink * LPADVISESINK, ** LPLPADVISESINK;
  32. typedef         interface IMoniker * LPMONIKER, ** LPLPMONIKER;
  33.  
  34.  
  35. // Data/View aspect; specifies the desired aspect of the object when 
  36. // drawing or getting data.
  37. typedef enum tagDVASPECT
  38. {
  39.     DVASPECT_CONTENT = 1,
  40.     DVASPECT_THUMBNAIL = 2,
  41.     DVASPECT_ICON = 4,
  42.     DVASPECT_DOCPRINT = 8
  43.     ,DVASPECT_FORCELONG    =    2147483647
  44. } DVASPECT;
  45.  
  46.  
  47. // target device flags
  48. typedef enum tagTDFLAGS
  49. {
  50.     TD_PRINTER = 1,             // if set, td describes a printer
  51.     TD_POSTSCRIPT = 2,        // if set, td has postscript
  52.     TD_GX = 4                // if set, td has GX
  53.     ,TD_FORCELONG    =    2147483647
  54. } TDFLAGS;
  55.  
  56. // Data/View target device; determines the device for drawing or getting data
  57. typedef struct FARSTRUCT tagDVTARGETDEVICE
  58. {
  59.     long    tdSize;
  60.     // Windows definition
  61.     unsigned short tdDriverNameOffset;
  62.     unsigned short tdDeviceNameOffset;
  63.     unsigned short tdPortNameOffset;
  64.     unsigned short tdExtDevmodeOffset;
  65.     unsigned char  tdWinData[1];
  66.     unsigned char     byAlign;
  67.  
  68.     // MAC Definition.
  69.     long    dwSizeX;    // max length in pixels
  70.     long    dwSizeY;    //
  71.     short     wDpiX;        // dots per inch x
  72.     short    wDpiY;        // dots per inch y
  73.     short    wColorDepth;// in color bits (eg 8 == 256 colors)
  74.     short    wFlags;        // printer/screen,.i postscript, gx etc.
  75.     short    wMisc;        // offset to app specific data or NULL (usually null)
  76.     unsigned char tdData[1];
  77. } DVTARGETDEVICE, *LPDVTARGETDEVICE;
  78.  
  79.  
  80. // Format, etc.; completely specifices the kind of data desired, including tymed
  81. typedef struct FARSTRUCT tagFORMATETC
  82. {
  83.     unsigned long          cfFormat;
  84.     DVTARGETDEVICE * ptd;
  85.     unsigned long               dwAspect;
  86.     long                lindex;
  87.     unsigned long               tymed;
  88. } FORMATETC, * LPFORMATETC;
  89.  
  90.  
  91. // TYpes of storage MEDiums; determines how data is stored or passed around
  92. typedef enum tagTYMED
  93. {
  94.     TYMED_HGLOBAL = 1,
  95.     TYMED_FILE = 2,
  96.     TYMED_ISTREAM = 4,
  97.     TYMED_ISTORAGE = 8,
  98.     TYMED_GDI = 16,
  99.     TYMED_MFPICT = 32,
  100.     TYMED_PICT = 32,
  101.     TYMED_FSP    = 64,
  102.     TYMED_NULL = 0
  103.     ,TYMED_FORCELONG    =    2147483647
  104. } TYMED;
  105.  
  106.  
  107. // DATA format DIRection
  108. typedef enum tagDATADIR
  109. {
  110.     DATADIR_GET = 1,
  111.     DATADIR_SET = 2
  112.     ,DATADIR_FORCELONG    =    2147483647
  113. } DATADIR;
  114.  
  115.  
  116. // SToraGe MEDIUM; a block of data on a particular medium 
  117. typedef struct FARSTRUCT tagSTGMEDIUM
  118. {
  119.     unsigned long   tymed;
  120.     union
  121.     {
  122.         Handle  hGlobal;
  123.         char *   lpszFileName;
  124.         LPSTREAM pstm;
  125.         LPSTORAGE pstg;
  126.         FSSpec *pFSSpec;
  127.     }
  128. #ifdef NONAMELESSUNION
  129.     u       // add a tag when name less unions not supported
  130. #endif
  131. #if !defined(__cplusplus) && !defined(_MSC_VER)
  132.     u        // add a tag for Mac
  133. #endif
  134.     ;
  135.     IUnknown * pUnkForRelease;
  136. } STGMEDIUM, * LPSTGMEDIUM;
  137.  
  138.  
  139. // Advise Flags
  140. typedef enum tagADVF
  141. {
  142.     ADVF_NODATA = 1,
  143.     ADVF_PRIMEFIRST = 2,
  144.     ADVF_ONLYONCE = 4,
  145.     ADVF_DATAONSTOP = 64,
  146.     ADVFCACHE_NOHANDLER = 8,
  147.     ADVFCACHE_FORCEBUILTIN = 16,
  148.     ADVFCACHE_ONSAVE = 32
  149.     ,ADVF_FORCELONG    =    2147483647
  150. } ADVF;
  151.  
  152.  
  153. // Stats for data; used by several enumerations and by at least one 
  154. // implementation of IDataAdviseHolder; if a field is not used, it
  155. // will be NULL.
  156. typedef struct FARSTRUCT tagSTATDATA
  157. {                                   // field used by:
  158.     FORMATETC formatetc;            // EnumAdvise, EnumData (cache), EnumFormats
  159.     unsigned long advf;                     // EnumAdvise, EnumData (cache)
  160.     LPADVISESINK pAdvSink;      // EnumAdvise
  161.     unsigned long dwConnection;             // EnumAdvise
  162. } STATDATA;
  163.     
  164. typedef  STATDATA * LPSTATDATA;
  165.  
  166.  
  167.  
  168. /****** DV Interfaces ***************************************************/
  169.  
  170.  
  171. #undef  INTERFACE
  172. #define INTERFACE   IEnumFORMATETC
  173.  
  174. DECLARE_INTERFACE_(IEnumFORMATETC, IUnknown)
  175. {
  176.     BEGIN_INTERFACE
  177.     // *** IUnknown methods ***
  178.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void * * ppv) PURE;
  179.     STDMETHOD_(unsigned long,AddRef) (THIS)  PURE;
  180.     STDMETHOD_(unsigned long,Release) (THIS) PURE;
  181.  
  182.     // *** IEnumFORMATETC methods ***
  183.     STDMETHOD(Next) (THIS_ unsigned long celt, FORMATETC  * rgelt, unsigned long * pceltFetched) PURE;
  184.     STDMETHOD(Skip) (THIS_ unsigned long celt) PURE;
  185.     STDMETHOD(Reset) (THIS) PURE;
  186.     STDMETHOD(Clone) (THIS_ IEnumFORMATETC * * ppenum) PURE;
  187. };
  188. typedef        IEnumFORMATETC * LPENUMFORMATETC, ** LPLPENUMFORMATETC;
  189.  
  190.  
  191. #undef  INTERFACE
  192. #define INTERFACE   IEnumSTATDATA
  193.  
  194. DECLARE_INTERFACE_(IEnumSTATDATA, IUnknown)
  195. {
  196.     BEGIN_INTERFACE
  197.     // *** IUnknown methods ***
  198.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void * * ppv) PURE;
  199.     STDMETHOD_(unsigned long, AddRef) (THIS)  PURE;
  200.     STDMETHOD_(unsigned long, Release) (THIS) PURE;
  201.  
  202.     // *** IEnumSTATDATA methods ***
  203.     STDMETHOD(Next) (THIS_ unsigned long celt, STATDATA  * rgelt, unsigned long * pceltFetched) PURE;
  204.     STDMETHOD(Skip) (THIS_ unsigned long celt) PURE;
  205.     STDMETHOD(Reset) (THIS) PURE;
  206.     STDMETHOD(Clone) (THIS_ IEnumSTATDATA * * ppenum) PURE;
  207. };
  208. typedef        IEnumSTATDATA * LPENUMSTATDATA, ** LPLPENUMSTATDATA;
  209.  
  210.  
  211.  
  212. #undef  INTERFACE
  213. #define INTERFACE   IDataObject
  214.  
  215. #define DATA_E_FORMATETC        DV_E_FORMATETC
  216. #define DATA_S_SAMEFORMATETC    (DATA_S_FIRST + 0)
  217.  
  218. DECLARE_INTERFACE_(IDataObject, IUnknown)
  219.     BEGIN_INTERFACE
  220.     // *** IUnknown methods ***
  221.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void * * ppvObj) PURE;
  222.     STDMETHOD_(unsigned long,AddRef) (THIS)  PURE;
  223.     STDMETHOD_(unsigned long, Release) (THIS) PURE;
  224.  
  225.     // *** IDataObject methods ***
  226.     STDMETHOD(GetData) (THIS_ LPFORMATETC pformatetcIn,
  227.                             LPSTGMEDIUM pmedium ) PURE;
  228.     STDMETHOD(GetDataHere) (THIS_ LPFORMATETC pformatetc,
  229.                             LPSTGMEDIUM pmedium ) PURE;
  230.     STDMETHOD(QueryGetData) (THIS_ LPFORMATETC pformatetc ) PURE;
  231.     STDMETHOD(GetCanonicalFormatEtc) (THIS_ LPFORMATETC pformatetc,
  232.                             LPFORMATETC pformatetcOut) PURE;
  233.     STDMETHOD(SetData) (THIS_ LPFORMATETC pformatetc, STGMEDIUM  * pmedium,
  234.                             unsigned long fRelease) PURE;
  235.     STDMETHOD(EnumFormatEtc) (THIS_ unsigned long dwDirection,
  236.                             LPLPENUMFORMATETC ppenumFormatEtc) PURE;
  237.  
  238.     STDMETHOD(DAdvise) (THIS_ FORMATETC * pFormatetc, unsigned long advf, 
  239.                     LPADVISESINK pAdvSink, unsigned long * pdwConnection) PURE;
  240.     STDMETHOD(DUnadvise) (THIS_ unsigned long dwConnection) PURE;
  241.     STDMETHOD(EnumDAdvise) (THIS_ LPLPENUMSTATDATA ppenumAdvise) PURE;
  242. };                 
  243. typedef      IDataObject * LPDATAOBJECT, ** LPLPDATAOBJECT;
  244.  
  245.  
  246.  
  247. #undef  INTERFACE
  248. #define INTERFACE   IViewObject
  249.  
  250. #define VIEW_E_DRAW         (VIEW_E_FIRST)
  251. #define E_DRAW              VIEW_E_DRAW
  252.  
  253. #define VIEW_S_ALREADY_FROZEN   (VIEW_S_FIRST)
  254.  
  255. DECLARE_INTERFACE_(IViewObject, IUnknown)
  256.     BEGIN_INTERFACE
  257.     // *** IUnknown methods ***
  258.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void * * ppvObj) PURE;
  259.     STDMETHOD_(unsigned long,AddRef) (THIS)  PURE;
  260.     STDMETHOD_(unsigned long,Release) (THIS) PURE;
  261.  
  262.     // *** IViewObject methods ***
  263.     STDMETHOD(Draw) (THIS_ unsigned long dwDrawAspect, long lindex,
  264.                     void * pvAspect, DVTARGETDEVICE  * ptd,
  265.                     GrafPtr pGrafTargetDev,
  266.                     GrafPtr pGrafDraw, 
  267.                     LPCRECTL lprcBounds, 
  268.                     LPCRECTL lprcWBounds,
  269.                     void *, 
  270.                     unsigned long dwContinue) PURE;
  271.  
  272.     STDMETHOD(GetColorSet) (THIS_ unsigned long dwDrawAspect, long lindex,
  273.                     void * pvAspect, DVTARGETDEVICE  * ptd,
  274.                     GrafPtr pGrafTargetDev,
  275.                     void * * ppColorSet) PURE;
  276.                     
  277.     STDMETHOD(Freeze)(THIS_ unsigned long dwDrawAspect, long lindex, 
  278.                     void * pvAspect,
  279.                     unsigned long * pdwFreeze) PURE;
  280.     STDMETHOD(Unfreeze) (THIS_ unsigned long dwFreeze) PURE;
  281.     STDMETHOD(SetAdvise) (THIS_ unsigned long aspects, unsigned long advf, 
  282.                     LPADVISESINK pAdvSink) PURE;
  283.     STDMETHOD(GetAdvise) (THIS_ unsigned long * pAspects, unsigned long * pAdvf, 
  284.                     LPLPADVISESINK ppAdvSink) PURE;
  285. };
  286. typedef      IViewObject * LPVIEWOBJECT, ** LPLPVIEWOBJECT;
  287.  
  288.  
  289. #undef  INTERFACE
  290. #define INTERFACE   IViewObject2
  291.  
  292. DECLARE_INTERFACE_(IViewObject2, IViewObject)
  293.     BEGIN_INTERFACE
  294.     // *** IUnknown methods ***
  295.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void * * ppvObj) PURE;
  296.     STDMETHOD_(unsigned long,AddRef) (THIS)  PURE;
  297.     STDMETHOD_(unsigned long,Release) (THIS) PURE;
  298.  
  299.     // *** IViewObject methods ***
  300.     STDMETHOD(Draw) (THIS_ unsigned long dwDrawAspect, long lindex,
  301.                     void * pvAspect, DVTARGETDEVICE  * ptd,
  302.                     GrafPtr pGrafTargetDev,
  303.                     GrafPtr pGrafDraw, 
  304.                     LPCRECTL lprcBounds, 
  305.                     LPCRECTL lprcWBounds,
  306.                     void *, 
  307.                     unsigned long dwContinue) PURE;
  308.  
  309.     STDMETHOD(GetColorSet) (THIS_ unsigned long dwDrawAspect, long lindex,
  310.                     void * pvAspect, DVTARGETDEVICE  * ptd,
  311.                     GrafPtr pGrafTargetDev,
  312.                     void * * ppColorSet) PURE;
  313.                     
  314.     STDMETHOD(Freeze)(THIS_ unsigned long dwDrawAspect, long lindex, 
  315.                     void * pvAspect,
  316.                     unsigned long * pdwFreeze) PURE;
  317.     STDMETHOD(Unfreeze) (THIS_ unsigned long dwFreeze) PURE;
  318.     STDMETHOD(SetAdvise) (THIS_ unsigned long aspects, unsigned long advf, 
  319.                     LPADVISESINK pAdvSink) PURE;
  320.     STDMETHOD(GetAdvise) (THIS_ unsigned long * pAspects, unsigned long * pAdvf, 
  321.                     LPLPADVISESINK ppAdvSink) PURE;
  322.                     
  323.     // *** IViewObject2 methods ***
  324.     STDMETHOD(GetExtent) (THIS_ unsigned long dwDrawAspect, long lindex,
  325.                     DVTARGETDEVICE *ptd, LPSIZEL lpsizel) PURE;
  326.                     
  327. };
  328. typedef      IViewObject2 * LPVIEWOBJECT2, ** LPLPVIEWOBJECT2;
  329.  
  330.  
  331.  
  332. #undef  INTERFACE
  333. #define INTERFACE   IAdviseSink
  334.  
  335. DECLARE_INTERFACE_(IAdviseSink, IUnknown)
  336.     BEGIN_INTERFACE
  337.     // *** IUnknown methods ***
  338.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void * * ppv) PURE;
  339.     STDMETHOD_(unsigned long,AddRef) (THIS)  PURE;
  340.     STDMETHOD_(unsigned long,Release) (THIS) PURE;
  341.  
  342.     // *** IAdviseSink methods ***
  343.     STDMETHOD_(void,OnDataChange)(THIS_ FORMATETC * pFormatetc, 
  344.                             STGMEDIUM * pStgmed) PURE;
  345.     STDMETHOD_(void,OnViewChange)(THIS_ unsigned long dwAspect, long lindex) PURE;
  346.     STDMETHOD_(void,OnRename)(THIS_ LPMONIKER pmk) PURE;
  347.     STDMETHOD_(void,OnSave)(THIS) PURE;
  348.     STDMETHOD_(void,OnClose)(THIS) PURE;
  349. };
  350. //typedef      IAdviseSink * LPADVISESINK, ** LPLPADVISESINK;
  351.  
  352.  
  353.  
  354. #undef  INTERFACE
  355. #define INTERFACE   IAdviseSink2
  356.  
  357. DECLARE_INTERFACE_(IAdviseSink2, IAdviseSink)
  358.     BEGIN_INTERFACE
  359.     // *** IUnknown methods ***
  360.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void * * ppv) PURE;
  361.     STDMETHOD_(unsigned long,AddRef) (THIS)  PURE;
  362.     STDMETHOD_(unsigned long,Release) (THIS) PURE;
  363.  
  364.     // *** IAdviseSink methods ***
  365.     STDMETHOD_(void,OnDataChange)(THIS_ FORMATETC * pFormatetc, 
  366.                             STGMEDIUM * pStgmed) PURE;
  367.     STDMETHOD_(void,OnViewChange)(THIS_ unsigned long dwAspect, long lindex) PURE;
  368.     STDMETHOD_(void,OnRename)(THIS_ LPMONIKER pmk) PURE;
  369.     STDMETHOD_(void,OnSave)(THIS) PURE;
  370.     STDMETHOD_(void,OnClose)(THIS) PURE;
  371.  
  372.     // *** IAdviseSink2 methods ***
  373.     STDMETHOD_(void,OnLinkSrcChange)(THIS_ LPMONIKER pmk) PURE;
  374. };
  375. typedef      IAdviseSink2 * LPADVISESINK2, ** LPLPADVISESINK2;
  376.  
  377.  
  378.  
  379. #undef  INTERFACE
  380. #define INTERFACE   IDataAdviseHolder
  381.  
  382. DECLARE_INTERFACE_(IDataAdviseHolder, IUnknown)
  383.     BEGIN_INTERFACE
  384.     // *** IUnknown methods ***
  385.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void * * ppv) PURE;
  386.     STDMETHOD_(unsigned long,AddRef) (THIS)  PURE;
  387.     STDMETHOD_(unsigned long,Release) (THIS) PURE;
  388.  
  389.     // *** IDataAdviseHolder methods ***
  390.     STDMETHOD(Advise)(THIS_ LPDATAOBJECT pDataObject, FORMATETC * pFetc, 
  391.             unsigned long advf, LPADVISESINK pAdvise, unsigned long * pdwConnection) PURE;
  392.     STDMETHOD(Unadvise)(THIS_ unsigned long dwConnection) PURE;
  393.     STDMETHOD(EnumAdvise)(THIS_ LPLPENUMSTATDATA ppenumAdvise) PURE;
  394.  
  395.     STDMETHOD(SendOnDataChange)(THIS_ LPDATAOBJECT pDataObject, unsigned long dwReserved, unsigned long advf) PURE;
  396. };
  397. typedef      IDataAdviseHolder * LPDATAADVISEHOLDER, ** LPLPDATAADVISEHOLDER;
  398.  
  399.  
  400.  
  401. #undef  INTERFACE
  402. #define INTERFACE   IOleCache
  403.  
  404. #define CACHE_E_NOCACHE_UPDATED         (CACHE_E_FIRST)
  405.  
  406. #define CACHE_S_FORMATETC_NOTSUPPORTED  (CACHE_S_FIRST)
  407. #define CACHE_S_SAMECACHE               (CACHE_S_FIRST+1)
  408. #define CACHE_S_SOMECACHES_NOTUPDATED   (CACHE_S_FIRST+2)
  409.  
  410.  
  411. DECLARE_INTERFACE_(IOleCache, IUnknown)
  412. {
  413.     BEGIN_INTERFACE
  414.     // *** IUnknown methods ***
  415.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void * * ppvObj) PURE;
  416.     STDMETHOD_(unsigned long,AddRef) (THIS)  PURE;
  417.     STDMETHOD_(unsigned long,Release) (THIS) PURE;
  418.  
  419.     // *** IOleCache methods ***
  420.     STDMETHOD(Cache) (THIS_ LPFORMATETC lpFormatetc, unsigned long advf, unsigned long    * lpdwConnection) PURE;
  421.     STDMETHOD(Uncache) (THIS_ unsigned long dwConnection) PURE;
  422.     STDMETHOD(EnumCache) (THIS_ LPLPENUMSTATDATA ppenumStatData) PURE;
  423.     STDMETHOD(InitCache) (THIS_ LPDATAOBJECT pDataObject) PURE;
  424.     STDMETHOD(SetData) (THIS_ LPFORMATETC pformatetc, STGMEDIUM  * pmedium,
  425.                             unsigned long fRelease) PURE;
  426. };
  427. typedef         IOleCache * LPOLECACHE, ** LPLPOLECACHE;
  428.  
  429.  
  430.  
  431.  
  432. // Cache update Flags
  433.  
  434. #define    UPDFCACHE_NODATACACHE            0x00000001
  435. #define UPDFCACHE_ONSAVECACHE            0x00000002
  436. #define    UPDFCACHE_ONSTOPCACHE            0x00000004
  437. #define    UPDFCACHE_NORMALCACHE            0x00000008
  438. #define    UPDFCACHE_IFBLANK                0x00000010
  439. #define UPDFCACHE_ONLYIFBLANK            0x80000000
  440.  
  441. #define UPDFCACHE_IFBLANKORONSAVECACHE    (UPDFCACHE_IFBLANK | UPDFCACHE_ONSAVECACHE )
  442. #define UPDFCACHE_ALL                    (~UPDFCACHE_ONLYIFBLANK)
  443. #define UPDFCACHE_ALLBUTNODATACACHE        (UPDFCACHE_ALL & ~UPDFCACHE_NODATACACHE)
  444.  
  445.  
  446. // IOleCache2::DiscardCache options
  447. typedef enum tagDISCARDCACHE
  448. {
  449.     DISCARDCACHE_SAVEIFDIRTY =    0,    // Save all dirty cache before discarding
  450.     DISCARDCACHE_NOSAVE         =    1    // Don't save dirty caches before 
  451.                                     // discarding
  452.     ,DISCARDCACHE_FORCELONG    =    2147483647
  453. } DISCARDCACHE;
  454.  
  455.  
  456. #undef  INTERFACE
  457. #define INTERFACE   IOleCache2
  458.  
  459. DECLARE_INTERFACE_(IOleCache2, IOleCache)
  460.     BEGIN_INTERFACE
  461.     // *** IUnknown methods ***
  462.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void * * ppvObj) PURE;
  463.     STDMETHOD_(unsigned long,AddRef) (THIS)  PURE;
  464.     STDMETHOD_(unsigned long,Release) (THIS) PURE;
  465.  
  466.     // *** IOleCache methods ***
  467.     STDMETHOD(Cache) (THIS_ LPFORMATETC lpFormatetc, unsigned long advf, unsigned long    * lpdwConnection) PURE;
  468.     STDMETHOD(Uncache) (THIS_ unsigned long dwConnection) PURE;
  469.     STDMETHOD(EnumCache) (THIS_ LPLPENUMSTATDATA ppenumStatData) PURE;
  470.     STDMETHOD(InitCache) (THIS_ LPDATAOBJECT pDataObject) PURE;
  471.     STDMETHOD(SetData) (THIS_ LPFORMATETC pformatetc, STGMEDIUM  * pmedium,
  472.                             unsigned long fRelease) PURE;
  473.  
  474.     // *** IOleCache2 methods ***                            
  475.     STDMETHOD(UpdateCache) (THIS_ LPDATAOBJECT pDataObject, unsigned long grfUpdf, 
  476.                             void *pReserved) PURE;
  477.     STDMETHOD(DiscardCache) (THIS_ unsigned long dwDiscardOptions) PURE;
  478.                         
  479. };
  480. typedef      IOleCache2 * LPOLECACHE2, ** LPLPOLECACHE2;
  481.  
  482.  
  483. #undef  INTERFACE
  484. #define INTERFACE   IOleCacheControl
  485.  
  486. DECLARE_INTERFACE_(IOleCacheControl, IUnknown)
  487.     BEGIN_INTERFACE
  488.     // *** IUnknown methods ***
  489.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void * * ppvObj) PURE;
  490.     STDMETHOD_(unsigned long,AddRef) (THIS)  PURE;
  491.     STDMETHOD_(unsigned long,Release) (THIS) PURE;
  492.  
  493.     // *** IDataObject methods ***
  494.     STDMETHOD(OnRun) (THIS_ LPDATAOBJECT pDataObject) PURE;
  495.     STDMETHOD(OnStop) (THIS) PURE;
  496. };                 
  497. typedef      IOleCacheControl * LPOLECACHECONTROL, ** LPLPOLECACHECONTROL;
  498.  
  499.  
  500. /****** DV APIs ***********************************************************/
  501.  
  502.  
  503. STDAPI CreateDataAdviseHolder(LPLPDATAADVISEHOLDER ppDAHolder);
  504.  
  505. STDAPI CreateDataCache(LPUNKNOWN pUnkOuter, REFCLSID rclsid,
  506.                     REFIID iid, void ** ppv);
  507.                     
  508. #endif /* !__DVOBJ__ */
  509.